Sentaurus Device Electromagnetic Wave Solver
2. Basics

2.1 Introduction
2.2 General Notes on the Command File
2.3 Globals Section
2.4 ComplexRefractiveIndex Section
2.5 Boundary Section
2.6 PlaneWaveExcitation Section
2.7 Plot Section
2.8 Extractor Section
2.9 Sensor Section
2.10 Detector Section
2.11 Postprocessing

Objectives

2.1 Introduction

In the following section, you are introduced to the most common features of EMW in the context of a simple 2D silicon–air structure, where you will calculate the optical generation profile in silicon and the reflection. The structure is shown in Figure 1.

Silicon-air structure of example, showing tensor grid

Figure 1. Silicon–air structure of the investigated example, showing the tensor grid.

Click to view the command file emw_eml.cmd.

The complete project can be investigated from within Sentaurus Workbench in the directory Applications_Library/GettingStarted/emw/simple2d.

For your convenience, a similar project has been created for the 3D case. The complete project can be investigated from within Sentaurus Workbench in the directory Applications_Library/GettingStarted/emw/simple3d.

2.2 General Notes on the Command File

An EMW command file consists of several command sections of the form Section {...}, with each section describing a specific aspect of the simulation. Inside a section, each command keyword has the form keyword = value, for example:

* Plot the absolute value of the electric field at the end of the simulation
Plot {
  Name      = "n@node@_Eabs"
  Quantity  = {AbsElectricField, AbsMagneticField, Region}
  TickStep  = 300
  StartTick = 100
  EndTick   = 800
  FinalPlot = yes
}                                       

Keywords are case insensitive, but identifiers such as region names and materials are surrounded by double quotation marks and are case sensitive.

Lists are defined in braces with their items separated by a comma. Comments are indicated by the first character on a line being # or *.

Typically, an EMW simulation consists of the following sections:

In general, the order of the sections in the command file is arbitrary. However, it is recommended that you maintain the above order because it simplifies navigation looking for a certain parameter. Each command section is described in the following sections sequentially, in the context of the 2D silicon–air structure example.

2.3 Globals Section

The Globals section contains all the global parameter settings for the simulation, such as input and output file names, which kernel to use, how many threads should be used for the calculation, and some limits on the simulation time or the maximum time steps.

As a minimal requirement, you must specify GridFile = "myGrid_msh.tdr" to indicate the tensor grid to be used in the EMW simulation.

In addition, typically, the parameter file containing the refractive index data and the log file are specified by the keywords ParameterFile and LogFile, respectively. An Inspect file is used when global values have to be stored, such as the integrated absorbed photon density in a certain volume or the photon flux through a surface. As multiple Plot sections are allowed, the plot file names are defined in the corresponding Plot sections using the keyword Name.

FDTD simulations can become very time-consuming. Therefore, it is a good idea to limit the maximum number of allowed time steps to be calculated by TotalTimeSteps or the total simulation time itself by TotalSimulationTime (in seconds).

2.4 ComplexRefractiveIndex Section

EMW allows you to define the optical parameters as a complex refractive index (CRI) in the material parameter file. It uses the same CRI library as Sentaurus Device. Therefore, the same parameter file as for Sentaurus Device can be used. Then, the optical data is read from the ComplexRefractiveIndex section:

Material = "Gas" { 
  ComplexRefractiveIndex {
    Formula = 0
    n_0 = 1
    k_0 = 0
  }
}

The CRI offers different dependencies of the refractive index. The most commonly used is wavelength dependency. The dependencies can be controlled materialwise or regionwise by specifying multiple ComplexRefractiveIndex sections with the additional keyword Material or Region. In the example below, for the region "ambient", you use a constant refractive index, while for the material "Silicon", you use a wavelength dependency for both the refractive index (Real) and the extinction coefficient (Imag):

ComplexRefractiveIndex {
  Region = "ambient"
}

ComplexRefractiveIndex {
  Material = "Silicon"
  WavelengthDep = {Real,Imag}
}

If neither Material nor Region is specified, the settings apply to all regions.

2.5 Boundary Section

For each border of the simulation domain, boundary conditions (BCs) must be specified. The border of the domain can be addressed by specifying the keyword Sides containing a list of X, Y, Z, or Xmin, Xmax, and so on.

In this example, you have an infinite silicon–air interface, so you can use periodic BCs in the horizontal direction. In addition, to investigate oblique incident light, you can choose PeriodicOblique BC:

Boundary {
  Type  = periodicOblique
  Sides = {X}
} 

In the vertical direction (Sides = {Y}), you can use absorbing BCs, where the best damping or absorption is achieved with the convolutional perfectly matched layer (CPML) by setting Type = CPML. EMW provides a set of default parameters that are suitable for the most common situation in semiconductor devices. For more details, refer to the corresponding section in the Sentaurus Device Electromagnetic Wave Solver User Guide, "Specifying Parameters of CPML Boundary Condition".

2.6 PlaneWaveExcitation Section

The PlaneWaveExcitation section summarizes everything related to the plane wave excitation:

PlaneWaveExcitation {
  BoxCorner1 = (0., -0.5, 0.)    
  BoxCorner2 = (0.1,-0.5, 0.)
  Theta      = 0
  Psi        = 0                                                             
  Wavelength = @<1000.*wavelength>@ * nm
  Intensity  = 0.1  * W/cm2
  Nrise      = 4    * number of signal periods until full power
}

The excitation plane must be axis aligned and cuts through the entire simulation domain. It is defined by specifying two points of the plane with BoxCorner1 and BoxCorner2 (see the red line in Figure 1).

The direction of the plane wave – the k-vector – is defined by the angles Theta and Phi. A third angle Psi can be used to define the direction of the E-vector or the polarization plane (see Figure 2).

Angles for defining 3D excitation

Figure 2. Angles for defining 3D excitation. (Click image for full-size view.)

In 2D, the 3D notation shown in Figure 2 is fully supported. However, if only Theta is specified and Phi is omitted, the 2D specification is used, where Theta is counted from the positive y-axis clockwise (see Figure 3). The 2D and 3D angular settings can be reviewed in the log file.

Angle and polarization definitions for 2D excitation

Figure 3. Angle and polarization definitions for 2D excitation. (Click image for full-size view.)

The intensity and wavelength of the plane wave are set by specifying the Intensity in W/cm2 and Wavelength in nanometer. Alternatively, the E-field Amplitude in V/m and Frequency in Hz can be used.

Finally, for the harmonic signal, the keyword NRise specifies the number of signal periods before the full amplitude is reached. This is an important keyword to achieve good convergence: Too small a value introduces artificial higher frequencies (think of a step function whose Fourier transformation consists of a very broad spectrum), which must vanish before steady state is reached and, eventually, prevent the system from converging. On the other hand, too high a value increases simulation time, because a larger rise time results in a longer total calculation time. Typical values are between 4 and 15 in practice.

2.7 Plot Section

The Plot section controls the plotting of time-dependent quantities such as the E-field and H-field, or the Poynting vector:

Plot {
  Name      = "n@node@_Eabs"
  Quantity  = {AbsElectricField, AbsMagneticField, Region}
  TickStep  = 300
  StartTick = 100
  EndTick   = 800
  FinalPlot = yes
}                                       

As multiple Plot sections are allowed in the command file, each Plot section has a name, which is used as the file name for the plot file, for example, Name = "n1_Eabs" generates a plot file n1_Eabs_eml.tdr.

The quantities that will be included in the plot can be selected with Quantity = {<identifier>, ... }. In the above example, the electric and magnetic field magnitudes are plotted. The quantity Region stores the region boundaries and their names in the plot file for better orientation during visualization.

When the plot is to be performed, it can be controlled with the keywords StartTick, EndTick, and TickStep. In above example, a plot is generated starting at the 100th time step, then every 300 time steps until the 800th time step is reached, that is, at 100, 400, 700. The created plot files have an index appended to the file name (n1_Eabs_eml_000.tdr).

If FinalPlot = yes is specified, a plot file will be created at the end of the simulation.

In summary, the above Plot section generates several plot files with the file names n4_Eabs_eml_000.tdr, n4_Eabs_eml_001.tdr, and n4_Eabs_eml_002.tdr, and in addition the final plot file n4_Eabs_eml.tdr. The plot files can be viewed with Tecplot SV. For an introduction, see the Tecplot SV module.

As EMW grids typically have millions of vertices, the plotting can be restricted to a user-defined box or region to reduce the amount of stored data. The definition of the plot box is analogous to the specification of the excitation plane by using BoxCorner1 and BoxCorner2:

Plot {
  Name       = "n@node@_Si"
  BoxCorner1 = (0,   0, 0)
  BoxCorner2 = (0.1, 1, 0)
  Quantity   = {AbsElectricField, Region}
}                                       

In three dimensions, you also can perform plotting only on the surface of the plot box by specifying Domain = Surface. In this case, the plot surface can be selected – similar to the Boundary section – with the keyword Sides = X | Xmin | Xmax | Y...| Z.... The following Plot section, for example, generates an x-cut of the electric field at x = 0.05 and saves it to a file n4_xcut_eml.tdr:

Plot {                                          
  Name      = "n@node@_xcut"
  Quantity  = {AbsElectricField}
  BoxCorner1 = (0.05, 0,  -1)    
  BoxCorner2 = (0.05, 0.1, 1)
  Domain    = Surface
  Sides     = {X}
  FinalPlot = yes
}

Another possibility to reduce the amount of stored data is to plot the result variables on a coarser mixed-element grid, instead of the very dense tensor grid. This can be activated by providing a mixed-element grid file with GridFile in the Plot section. An example is provided in Section 3. Integrating EMW in Sentaurus Workbench Tool Flow.

2.8 Extractor Section

The Extractor section is very similar to the Plot section: It generates the output of device quantities. The output can be restricted to certain regions, evaluated for the volume or a particular surface, and it can be written on a coarse mixed-element grid instead of a tensor grid. However, the main difference is that Extractor sections extract quantities that require heavy postprocessing, for example, time-averaged quantities such as the time-averaged PowerFluxDensity, AbsorbedPhotonDensity, and OpticalGeneration.

The most important quantity, the optical generation, is covered by AbsorbedPhotonDensity. In the following example, the absorbed photon density profile in the silicon can be computed using the syntax:

Extractor {
  Name     = "n@node@_g"
  Quantity = {absorbedPhotonDensity, Region}
}

The result is stored in the file n4_g_eml.tdr and can be viewed in a similar way to the plot files in Tecplot SV.

2.9 Sensor Section

Sensors provide users with the ability to measure integrated values of the photon flux through user-defined areas or the absorbed photon density in selected volumes. Similar to excitation, the region of interest can be defined with BoxCorner1 and BoxCorner2. In addition, a region of the tensor grid, which does not necessarily need to be cuboid, can be used as the identifier for volume integration.

The region definition requires more run-time, so wherever possible, use boxes as the integration regions.

As multiple sensors are allowed, sensors must be named with the keyword Name. The quantity to be measured is set with Quantity. The sensor returns the integrated value, or the averaged value, or both (for example, Mode = {Integrate, Average}).

For 2D simulations, the third dimension is assumed to be 1 μm.

In the next example, you are interested in the reflection quantity of the structure. Therefore, the sensor is defined above the excitation plane at the upper boundary in the scattered field region (see Figure 1):

Sensor {
  Name       = "reflected"
  Quantity   = PhotonFluxDensity 
  BoxCorner1 = (0. , -1, 0)
  BoxCorner2 = (0.1, -1, 0)
  Mode       = {Integrate}
}

This returns the number of photons per second reflected. However, usually, you are interested in the reflection coefficient, so you must divide the number of reflected photons by the number of incident photons.

As the number of incident photons is not directly accessible as in the total-field scattered-field excitation, you only have (Total Field = Incident + Reflected) and (Scattered Field = Reflected). However, knowing the total flux, you can subtract the scattered flux to extract the incident flux. For this, you can define a sensor solely between the excitation plane and the silicon surface to measure the total flux (see Figure 1):

Sensor {
  Name       = "total"
  Quantity   = PhotonFluxDensity 
  BoxCorner1 = (0,   -0.2, 0)
  BoxCorner2 = (0.1, -0.2, 0)
  Mode       = {Integrate}
}

The results are accessible in the log file and the Inspect file, and can be viewed and further processed in Inspect.

To compute the transmission coefficient, you can add, in a similar way as for the reflection, an additional sensor at the bottom of the silicon (see Figure 1).

To calculate the absorption, you can define a sensor that encloses the entire silicon region but, this time, integrating the absorbed photon density:

Sensor {
  Name     = "absorbed"
  Quantity = absorbedPhotonDensity
  Region   = {"substrate"}
  Mode     = {Integrate}
}

For volume integration, it is also possible to define box corners and a region at the same time. In that case, the keyword Domains defines how the integration volumes will be connected: They can be evaluated as United, or Intersecting, or Separate. The following Sensor section performs the integration in the substrate region, but only if it is inside a rectangle of (0,-1)-(0.05,1):

Sensor {
  Name       = "intersected"
  Quantity   = absorbedPhotonDensity
  Region     = {"substrate"}
  BoxCorner1 = (0. , -1, 0)
  BoxCorner2 = (0.05, 1, 0)
  Domains    = Intersecting
  Mode       = {Integrate}
}

2.10 Detector Section

The purpose of the detector is to terminate the simulation if the simulation fulfills certain criteria. For harmonic excitation, the simulation terminates if a time-harmonic steady-state is reached, that is, if the maximum deviation of the field compared to the field in the immediately preceding period is lower than the specified Tolerance.

In this case, you can set the evaluation region of the detector for the entire simulation domain, with Tolerance set to 1e-3:

Detector {
  Tolerance = 1e-3
}

2.11 Postprocessing

FDTD simulations are usually very time consuming and produce huge amounts of data, which are difficult to handle afterwards. Imagine you ran a FDTD simulation for a few hours and, at the end, you realize that you would like to investigate the E-field in an additional cut or to use an additional sensor to integrate the absorbed photon density for a different region. In this case, the postprocessing capability of EMW can be very helpful.

The postprocessing capability of EMW allows you to save the absorbed photon density and power flux density together with the region information at the end of a FDTD simulation in a so-called save file. After the simulation, this save file can be loaded into EMW, applying arbitrary extractors and sensors to it without having to redo the calculation.

To demonstrate the principle of postprocessing, the simple2d project described above is chosen and split into two EMW tool instances:

The first tool instance emw does the FDTD calculation, without applying any extractor or sensor. It simply saves the results in a save file by specifying a Save section:

Save {
  Name = "@save@"
  Quantity = {AbsorbedPhotonDensity, PowerFluxDensity}
}

The save file name is specified with the Sentaurus Workbench file reference @save@, which expands to n4_save_eml.tdr.

Click to view the command file emw_eml.cmd.

The second tool instance emwPostProcess loads the save file by specifying LoadFile in the Globals section:

Globals {
  LoadFile    = "@load@"
  InspectFile = "@plot@"
  LogFile     = "@log@"
}

Again, a Sentaurus Workbench file reference is used to specify the file name; @load@ expands to n4_save_eml.tdr. Subsequently, any Extractor or Sensor sections are evaluated as for a standard EMW simulation.

For postprocessing, apart from the Globals section, only Extractor and Sensor sections are allowed.

In this particular example, the absorbed photon density is extracted and sensors are placed as for the simple2d project to extract reflection, transmission, and absorption.

Click to view the command file emwPostProcess_eml.cmd.

The complete project can be investigated from within Sentaurus Workbench in the directory Applications_Library/GettingStarted/emw/simple2d-postprocess.

main menu    |   module menu    |   << previous section    |   next section >>